const path = require('path');
var webpack = require('webpack');
const entryPoint = require('./webpack.entry'); // 入口文件配置
const rules = require('./webpack.module.rules'); // 文件loader相关

module.exports = {
  mode: "development", // "production" | "development" | "none"
  // Chosen mode tells webpack to use its built-in optimizations accordingly.

  entry: entryPoint.entry, // string | object | array
  // 这里应用程序开始执行
  // webpack 开始打包

  output: {
    // webpack 如何输出结果的相关选项

    path: path.resolve(__dirname, "dist"), // string
    // 所有输出文件的目标路径
    // 必须是绝对路径（使用 Node.js 的 path 模块）

    filename: "[name].bundle.js", // string
    // 「入口分块(entry chunk)」的文件名模板（出口分块？）

  },

  module: {
    // 关于模块配置

    rules: rules.rules,

    /* 高级模块配置（点击展示） */
  },

  resolve: {
    extensions: [".js", ".json", ".jsx", ".css", ".ts", ".tsx"],
    // 使用的扩展名
  },

  performance: {
    hints: "warning", // 枚举
    maxAssetSize: 2000000, // 整数类型（以字节为单位）
    maxEntrypointSize: 4000000, // 整数类型（以字节为单位）
    assetFilter: function(assetFilename) {
      // 提供资源文件名的断言函数
      return assetFilename.endsWith('.css') || assetFilename.endsWith('.js');
    }
  },

  devtool: "source-map", // enum
  // 通过在浏览器调试工具(browser devtools)中添加元信息(meta info)增强调试
  // 牺牲了构建速度的 `source-map' 是最详细的。

  // context: __dirname, // string（绝对路径！）
  // webpack 的主目录
  // entry 和 module.rules.loader 选项
  // 相对于此目录解析

  target: "web", // 枚举
  // 包(bundle)应该运行的环境
  // 更改 块加载行为(chunk loading behavior) 和 可用模块(available module)

  externals: {
    "react":"React",
    "react-dom":"ReactDOM"
  },
  // 不要遵循/打包这些模块，而是在运行时从环境中请求他们

  stats: "errors-only",
  // 精确控制要显示的 bundle 信息

  devServer: {
    contentBase: "./dist", // boolean | string | array, static file location
    compress: true, // enable gzip compression
    // historyApiFallback: true, // true for index.html upon 404, object for multiple paths
    hot: true, // hot module replacement. Depends on HotModuleReplacementPlugin
    // https: false, // true for self-signed, object for cert authority
    // noInfo: true, // only errors & warns on hot reload
    // ...
  },

  plugins: [
    // new webpack.NamedModulesPlugin(),
    new webpack.HotModuleReplacementPlugin(),
  ],
  // 附加插件列表


  /* 高级配置（点击展示） */
}